package com.lishe.lishe.Imageloader;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView;

import com.lishe.lishe.R;
import com.lishe.lishe.lishe.base.BaseApplication;
import com.lishe.lishe.lishe.utils.BitmapUtils;
import com.lishe.lishe.lishe.utils.ImageUtils;
import com.lishe.lishe.lishe.utils.Utils;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.LoadedFrom;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.imageaware.ImageViewAware;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;

/**
 * Created lwa on 2017/8/15.
 */

public class ImageLoaderUtils {
    private DisplayImageOptions options0;
    private ImageLoader imageLoader;
    private int imgCorner = 120;//默认图片大小

    /**
     * 无参数
     */
    public ImageLoaderUtils() {
        getImageLoad();
    }


    /**
     * @param cornerRadiusPixels 图片圆角，默认四周圆角
     */
    public ImageLoaderUtils(int cornerRadiusPixels) {
        getImageLoad(null, cornerRadiusPixels, FlexibleRoundeBitmapDisplayer.CORNER_ALL);
    }

    /**
     * @param cornerRadiusPixels 图片圆角
     * @param corners            自定义圆角
     *                           <p>
     *                           CORNER_NONE　无圆角
     *                           <p>
     *                           CORNER_ALL 全为圆角
     *                           <p>
     *                           CORNER_TOP_LEFT | CORNER_TOP_RIGHT | CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT　| CORNER_TOP_LEFT_RIGHT 指定圆角（选其中若干组合  ）
     */
    public ImageLoaderUtils(int cornerRadiusPixels, int corners) {
        getImageLoad(null, cornerRadiusPixels, corners);
    }

    /**
     * @param options            参数
     * @param cornerRadiusPixels 图片圆角
     */
    public ImageLoaderUtils(DisplayImageOptions options, int cornerRadiusPixels) {
        getImageLoad(options, cornerRadiusPixels, FlexibleRoundeBitmapDisplayer.CORNER_ALL);
    }

    /**
     * @param options            参数
     * @param cornerRadiusPixels 图片圆角
     * @param corners            自定义圆角
     *                           <p>
     *                           CORNER_NONE　无圆角
     *                           <p>
     *                           CORNER_ALL 全为圆角
     *                           <p>
     *                           CORNER_TOP_LEFT | CORNER_TOP_RIGHT | CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT　| CORNER_TOP_LEFT_RIGHT 指定圆角（选其中若干组合  ）
     */
    public ImageLoaderUtils(DisplayImageOptions options, int cornerRadiusPixels, int corners) {
        getImageLoad(options, cornerRadiusPixels, corners);
    }

    private void getImageLoad(DisplayImageOptions options, int cornerRadiusPixels, int corners) {
        imageLoader = ImageLoader.getInstance();
        if (options == null) {
            options0 = new DisplayImageOptions.Builder()
                    .showImageOnLoading(R.drawable.defalut_img) // 设置图片下载期间显示的图片
                    .showImageForEmptyUri(R.drawable.defalut_img) // 设置图片Uri为空或是错误的时候显示的图片
                    .showImageOnFail(R.drawable.defalut_img) // 设置图片加载或解码过程中发生错误显示的图片
                    .bitmapConfig(Bitmap.Config.ARGB_8888)   //设置图片的解码类型
                    .displayer(new FlexibleRoundeBitmapDisplayer(cornerRadiusPixels, corners))
                    .cacheOnDisk(true)
                    .cacheInMemory(true)
                    .build();
        } else {
            options0 = options;
        }
    }

    private void getImageLoad() {
        imageLoader = ImageLoader.getInstance();
        options0 = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.defalut_img) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.defalut_img) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.defalut_img) // 设置图片加载或解码过程中发生错误显示的图片
                .bitmapConfig(Bitmap.Config.ARGB_8888)   //设置图片的解码类型
                .cacheOnDisk(true)
                .cacheInMemory(true)
                .build();
    }

    public DisplayImageOptions setOptionsImage(int imageId) {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(imageId) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(imageId) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(imageId) // 设置图片加载或解码过程中发生错误显示的图片
                .bitmapConfig(Bitmap.Config.ARGB_8888)   //设置图片的解码类型
                .cacheOnDisk(true)
                .cacheInMemory(true)
                .build();
        return options;
    }

    /**
     * 载图
     *
     * @param url
     * @param imageView
     */
    public void displayImage(final String url, final ImageView imageView) {
        imageLoader.displayImage(url, imageView, options0);
    }

    public void displayImage(final String url, final ImageView imageView, DisplayImageOptions options0) {
        imageLoader.displayImage(url, imageView, options0);
    }

    /**
     * 载图本地
     *
     * @param url
     * @param imageView
     */
    public void displayLocationImage(final String url, final ImageView imageView) {
        imageLoader.displayImage("file://" + url, imageView, options0);
    }

    /**
     * 载图
     *
     * @param url
     * @param imageView
     */
    public void displayImageNoOpttion(String url, ImageView imageView) {
        imageLoader.displayImage(url, imageView);
    }

    public Bitmap getBitmap(String url) {
        return imageLoader.loadImageSync(url, options0);
    }

    public void setImageBitmap(final String url, final ImageView imageView) {
        if(imageView.getTag()==null){

        }else{
            imageView.setImageResource(R.drawable.defalut_img);
        }
        imageLoader.loadImage(url, options0, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {

            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                imageView.post(new Runnable() {
                    @Override
                    public void run() {
                        imageView.setImageResource(R.drawable.defalut_img);
                    }
                });
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, final Bitmap loadedImage) {
                imageView.post(new Runnable() {
                    @Override
                    public void run() {
                        imageView.setImageBitmap(loadedImage);
                    }
                });
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {

            }
        });
    }
}
